1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.reflect;
18
19 import static com.google.common.base.Preconditions.checkNotNull;
20
21 import java.lang.annotation.Annotation;
22 import java.lang.reflect.AccessibleObject;
23 import java.lang.reflect.Constructor;
24 import java.lang.reflect.Field;
25 import java.lang.reflect.Member;
26 import java.lang.reflect.Method;
27 import java.lang.reflect.Modifier;
28
29 import javax.annotation.Nullable;
30
31
32
33
34
35
36
37 class Element extends AccessibleObject implements Member {
38
39 private final AccessibleObject accessibleObject;
40 private final Member member;
41
42 <M extends AccessibleObject & Member> Element(M member) {
43 checkNotNull(member);
44 this.accessibleObject = member;
45 this.member = member;
46 }
47
48 public TypeToken<?> getOwnerType() {
49 return TypeToken.of(getDeclaringClass());
50 }
51
52 @Override public final boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) {
53 return accessibleObject.isAnnotationPresent(annotationClass);
54 }
55
56 @Override public final <A extends Annotation> A getAnnotation(Class<A> annotationClass) {
57 return accessibleObject.getAnnotation(annotationClass);
58 }
59
60 @Override public final Annotation[] getAnnotations() {
61 return accessibleObject.getAnnotations();
62 }
63
64 @Override public final Annotation[] getDeclaredAnnotations() {
65 return accessibleObject.getDeclaredAnnotations();
66 }
67
68 @Override public final void setAccessible(boolean flag) throws SecurityException {
69 accessibleObject.setAccessible(flag);
70 }
71
72 @Override public final boolean isAccessible() {
73 return accessibleObject.isAccessible();
74 }
75
76 @Override public Class<?> getDeclaringClass() {
77 return member.getDeclaringClass();
78 }
79
80 @Override public final String getName() {
81 return member.getName();
82 }
83
84 @Override public final int getModifiers() {
85 return member.getModifiers();
86 }
87
88 @Override public final boolean isSynthetic() {
89 return member.isSynthetic();
90 }
91
92
93 public final boolean isPublic() {
94 return Modifier.isPublic(getModifiers());
95 }
96
97
98 public final boolean isProtected() {
99 return Modifier.isProtected(getModifiers());
100 }
101
102
103 public final boolean isPackagePrivate() {
104 return !isPrivate() && !isPublic() && !isProtected();
105 }
106
107
108 public final boolean isPrivate() {
109 return Modifier.isPrivate(getModifiers());
110 }
111
112
113 public final boolean isStatic() {
114 return Modifier.isStatic(getModifiers());
115 }
116
117
118
119
120
121
122
123
124 public final boolean isFinal() {
125 return Modifier.isFinal(getModifiers());
126 }
127
128
129 public final boolean isAbstract() {
130 return Modifier.isAbstract(getModifiers());
131 }
132
133
134 public final boolean isNative() {
135 return Modifier.isNative(getModifiers());
136 }
137
138
139 public final boolean isSynchronized() {
140 return Modifier.isSynchronized(getModifiers());
141 }
142
143
144 final boolean isVolatile() {
145 return Modifier.isVolatile(getModifiers());
146 }
147
148
149 final boolean isTransient() {
150 return Modifier.isTransient(getModifiers());
151 }
152
153 @Override public boolean equals(@Nullable Object obj) {
154 if (obj instanceof Element) {
155 Element that = (Element) obj;
156 return getOwnerType().equals(that.getOwnerType()) && member.equals(that.member);
157 }
158 return false;
159 }
160
161 @Override public int hashCode() {
162 return member.hashCode();
163 }
164
165 @Override public String toString() {
166 return member.toString();
167 }
168 }